package com.raft.core.log.snapshot;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Collections;
import java.util.Set;

import javax.annotation.Nonnull;
import javax.annotation.concurrent.Immutable;

import com.raft.core.node.NodeEndpoint;

/**空日志快照，主要是在刚开始没有日志快照时使用，类似于null Object
 * @author zhangsulei
 *
 */
@Immutable
public class EmptySnapshot implements Snapshot {

    @Override
    public int getLastIncludedIndex() {
        return 0;
    }

    @Override
    public int getLastIncludedTerm() {
        return 0;
    }

    @Nonnull
    @Override
    public Set<NodeEndpoint> getLastConfig() {
        return Collections.emptySet();
    }

    @Override
    public long getDataSize() {
        return 0;
    }

    @Override
    @Nonnull
    public SnapshotChunk readData(int offset, int length) {
        if (offset == 0) {
        	// 只支持offset为0的情况
        	// 第二个参数为true，表示最后一个数据块
            return new SnapshotChunk(new byte[0], true);
        }
        throw new IllegalArgumentException("offset > 0");
    }

    @Override
    @Nonnull
    public InputStream getDataStream() {
    	// 返回一个空的输入流
        return new ByteArrayInputStream(new byte[0]);
    }

    @Override
    public void close() {
    }

}
